#ifndef DELUACORE_H
#define DELUACORE_H

#include <QThread>

struct DeluacArgs
{
    /**
     * @brief 搜索目录
     */
    QString searchPath;
    /**
     * @brief XXTEA签名
     */
    QString xxteaSign;
    /**
     * @brief XXTEA密钥
     */
    QString xxteaKey;
    /**
     * @brief 源文件扩展名
     */
    QString srcExtension;
    /**
     * @brief 目标文件扩展名
     */
    QString destExtension;
    /**
     * @brief true 解密 false 猜测
     */
    bool isDecrypt = false;
};

enum class DeluacState
{
    Original = 0,
    Succeed = 1,
    Failed = 2,
};

class DeluacCore : public QThread
{
    Q_OBJECT
public:
    void startDecrypt(const DeluacArgs& args);
    void startGuess(const DeluacArgs &args);

protected:
    virtual void run();

signals:
    void decryptCompleted(const QString &, DeluacState, int);
    void guessCompleted(const QString &, const QString &);

private:
    void fetchFiles(const QString &searchFolder, const QString& nameFilter, QStringList &targetList);

    QByteArray getXxteaSign(const QString &filePath);
    QByteArray getXxteaKey(const QString &filePath);

    void runDecrypt(const QStringList &filePaths);
    void runGuess(const QStringList &filePaths);

private:
    DeluacArgs args;
};

#endif // DELUACORE_H
